import { DEBUG } from "cc/env";
import ResourceManageSingleton from "../libs/utils/ResourceManageSingleton";
import MonsterDTO from "../pojo/dto/MonsterDTO";
import MonsterPO from "../pojo/po/MonsterPO";
import IMonsterAttribute from "./monster/IMonsterAttribute";

/*****************************
 *@file: LevelManageSingle
 *@author: 陈吕唐
 *@desc: 关卡数据管理
 *@date: 2024-03-20	10:10
 *****************************/
export default class LevelManageSingle {
    /****************************************************************************************************************
     *Readonly 常量
     ****************************************************************************************************************/
    public static readonly single: LevelManageSingle = new LevelManageSingle();
    /****************************************************************************************************************
     *Property 定义变量
     ****************************************************************************************************************/
    /**
     * 怪物配置数据
     */
    private monsterPOMap: Map<number, MonsterPO> = new Map();

    /****************************************************************************************************************
     * Lifecycle 生命周期相关方法
     ****************************************************************************************************************/
    private constructor() {

    }
    /****************************************************************************************************************
     * Public 公有方法
     ****************************************************************************************************************/
    public init() {
        this.initPO();
    }

    /**
     * 计算怪物属性
     * @param value 怪物动态数据
     */
    public calMonsterAttribute(value: MonsterDTO): IMonsterAttribute {
        //TODO: 根据怪物ID等级，计算怪物属性
        let monsterPO: MonsterPO = this.monsterPOMap.get(value.id);
        if (monsterPO) {
            return monsterPO;
        }
        return null;
    }

    /****************************************************************************************************************
     * private 私有方法
     ****************************************************************************************************************/

    /**
     * 初始化配置数据
     */
    private initPO() {
        this.monsterPOMap.clear();
        let monsterArray: MonsterPO[] = ResourceManageSingleton.singleton.getJson(`Monster`);
        monsterArray.forEach(element => {
            this.monsterPOMap.set(element.id, element);
        });

        if (DEBUG) {
            // console.log(`monsterPOMap`);
            // console.log(this.monsterPOMap);
            // console.log(`characterPOMap`);
            // console.log(this.characterPOMap);
        }
    }
    /****************************************************************************************************************
     * Property Get && Set 属性的 get && set 函数
     ****************************************************************************************************************/
}